package org.jsola.hr.service;

import org.jsola.core.Page;
import org.jsola.core.service.IService;
import org.jsola.hr.dao.ISocPlanFeedbackRecordDAO;
import org.jsola.hr.dto.EmpSocPlanAttachDTO;
import org.jsola.hr.dto.SocPlanFeedbackRecordAddDTO;
import org.jsola.hr.dto.SocPlanFeedbackRecordUpdateDTO;
import org.jsola.hr.entity.SocPlanFeedbackRecordDO;
import org.jsola.hr.query.SocPlanFeedbackRecordQuery;
import org.jsola.hr.vo.SocPlanFeedbackRecordListVO;
import org.jsola.hr.vo.SocPlanFeedbackRecordVO;
import org.jsola.user.core.TokenUser;

import java.util.List;


/**
 * 增减员计划反馈记录表
 *
 * @author zhr
 */
public interface ISocPlanFeedbackRecordService extends IService<ISocPlanFeedbackRecordDAO, SocPlanFeedbackRecordDO> {

    /**
     * 新增增减员计划反馈记录表
     *
     * @param socPlanFeedbackRecordAddDTO 新增增减员计划反馈记录表DTO
     * @param tokenUser                   当前用户
     * @return 增减员计划反馈记录表详情信息
     */
    SocPlanFeedbackRecordVO save(SocPlanFeedbackRecordAddDTO socPlanFeedbackRecordAddDTO, TokenUser tokenUser);

    /**
     * 修改增减员计划反馈记录表
     *
     * @param socPlanFeedbackRecordUpdateDTO 修改增减员计划反馈记录表DTO
     * @param tokenUser                      当前用户
     * @return 更新数量
     */
    int update(SocPlanFeedbackRecordUpdateDTO socPlanFeedbackRecordUpdateDTO, TokenUser tokenUser);


    /**
     * 批量删除增减员计划反馈记录表，物理删除，更新is_valid字段，从回收站删除
     *
     * @param tokenUser                当前用户
     * @param socPlanFeedbackRecordIds 增减员计划反馈记录表id
     * @return 删除数量
     */
    int deleteByIds(TokenUser tokenUser, String... socPlanFeedbackRecordIds);

    /**
     * 根据增减员计划反馈记录表id查找
     *
     * @param socPlanFeedbackRecordId 增减员计划反馈记录表id
     * @param siteId                  所属站点id
     * @return 增减员计划反馈记录表详情信息
     */
    SocPlanFeedbackRecordVO selectById(String socPlanFeedbackRecordId, String siteId);

    /**
     * 查询增减员计划反馈记录表
     *
     * @param socPlanFeedbackRecordQuery 查询条件
     * @param siteId                     所属站点id
     * @return 增减员计划反馈记录表列表信息
     */
    List<SocPlanFeedbackRecordListVO> select(SocPlanFeedbackRecordQuery socPlanFeedbackRecordQuery, String siteId);

    /**
     * 查询增减员计划反馈记录表记录数
     *
     * @param socPlanFeedbackRecordQuery 查询条件
     * @param siteId                     所属站点id
     * @return 增减员计划反馈记录表记录数
     */
    int selectCount(SocPlanFeedbackRecordQuery socPlanFeedbackRecordQuery, String siteId);

    /**
     * 分页查询增减员计划反馈记录表
     *
     * @param socPlanFeedbackRecordQuery 查询条件
     * @param siteId                     所属站点id
     * @return 增减员计划反馈记录表列表信息
     */
    Page<SocPlanFeedbackRecordListVO> selectPage(SocPlanFeedbackRecordQuery socPlanFeedbackRecordQuery, String siteId);


    /**
     * 根据增减员计划反馈记录表id查找
     *
     * @param socPlanFeedbackRecordId 增减员计划反馈记录表id
     * @param siteId                  所属站点id
     * @return 增减员计划反馈记录表
     */
    SocPlanFeedbackRecordDO selectDOById(String socPlanFeedbackRecordId, String siteId);

    /**
     * 查询增减员计划反馈记录表
     *
     * @param socPlanFeedbackRecordQuery 查询条件
     * @param siteId                     所属站点id
     * @return 增减员计划反馈记录表列表
     */
    List<SocPlanFeedbackRecordDO> selectDO(SocPlanFeedbackRecordQuery socPlanFeedbackRecordQuery, String siteId);

    /**
     * 根据增减员计划查询对应计划的反馈记录
     *
     * @param planId 增减员计划Id
     * @param siteId 所属站点id
     * @return 增减员计划反馈记录表列表
     */
    List<SocPlanFeedbackRecordVO> selectRecordByPlanId(String planId, String siteId);

    /**
     * 初始化一个反馈记录
     *
     * @param feedbackState 计划状态
     * @param planId        增减员计划Id
     * @param planAttachDTO 增减员反馈的内容
     * @param tokenUser     当前用户
     * @return
     */
    SocPlanFeedbackRecordDO initRecord(String feedbackState, String planId, EmpSocPlanAttachDTO planAttachDTO, TokenUser tokenUser);

    /**
     * 批量保存
     *
     * @param saveList 保存列表
     */
    void bachSave(List<SocPlanFeedbackRecordDO> saveList);
}


